<?php

/* TODO: Add code here */
/*lớp đối tượng chứa những phương thức chung */
class user_product
{
	#region Consts
	
	const ACT_ADD							= 10;
	const ACT_UPDATE						= 11;
	const ACT_DELETE						= 12;
	const ACT_CHANGE_PAGE					= 13;
	const ACT_SHOW_EDIT = 14;
	const NUM_PER_PAGE = 10;
	
	const FOLDER_IMAGE_PRODUCT = 'images/products/';
	const FILE_TEMP_UPLOAD = 'name';
	const TBL_T_PRODUCT						= 't_product';
	
	
	
	const SQL_CREATE_TABLE_T_PRODUCT		= 'CREATE TABLE `t_product` (
		`product_id` bigint(20) NOT NULL COMMENT \'Mã sản phầm tăng tự động\',
		`name` char(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'Tên sản phầm\',
		`image` char(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'File hình ảnh của sản phẩm\',
		`manu_id` bigint(20) DEFAULT NULL COMMENT \'Tham chiếu mã nhà sản xuất của table t_manufactory\',
		`cat_id` int(11) DEFAULT NULL COMMENT \'Tham chiếu mã nhóm hàng của table t_catalogue\',
		`create_user` char(12) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'Mã user nhập sản phẩm\',
		`create_date` datetime DEFAULT NULL COMMENT \'Ngày user nhập sản phẩm\',
		`update_user` char(12) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'Mã user chỉnh sửa  sản phẩm gần nhất\',
		`update_date` datetime DEFAULT NULL COMMENT \'Ngày user chỉnh sửa  sản phẩmgần nhất\',
		`delete_user` char(12) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'Mã user xóa  sản phẩm\',
		`delete_date` datetime DEFAULT NULL COMMENT \'Ngày user xóa  sản phẩm\',
		`delete_flag` tinyint(4) DEFAULT \'0\' COMMENT \'0: avaiable,1 : delete\',
		`description` text COLLATE utf8_unicode_ci COMMENT \'Mô tả chung tính năng\',
		`tree_function` text COLLATE utf8_unicode_ci COMMENT \'chứa nội dung cấu trúc chức năng\',
		`tree_html` text COLLATE utf8_unicode_ci COMMENT \'chứa nội dung cấu trúc chức năng\',
		PRIMARY KEY (`product_id`)
		) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;';
	
	const SQL_INSERT_PRODUCT						= 'INSERT INTO `{0}`
		(`product_id`,`manu_id`,`cat_id`, `name`,`description`,`tree_function`,`tree_html`,`image`,`create_user`,`create_date`) 
		VALUES(\'{1}\',\'{2}\',\'{3}\',\'{4}\',\'{5}\',\'{6}\',\'{7}\',\'{8}\',\'{9}\',\'{10}\');';
	const SQL_UPDATE_PRODUCT				= 'UPDATE `{0}`
		SET 
		`manu_id`= \'{1}\',
		`cat_id`= \'{2}\',
		`name` = \'{3}\',
		`description` = \'{4}\',
		`tree_function`= \'{5}\',
		`tree_html`= \'{6}\',
		`image`= \'{7}\',
		`update_user`= \'{8}\',
		`update_date`= \'{9}\'
		WHERE `product_id` = \'{10}\';';
	
	#end region
	
	
	#region Variables
	var $_objConnection;
	#end region
	
	
	#region Contructors
	/**
	 *  Phương thức khởi tạo đối tượng product đồng thời tạo connection đến db
	 *
	 * @param object $objConnection Đối tượng kết nối đến db
		
	 * @return void 
	 *
	 */
	public function user_product($objConnection)
	{
		$this->_objConnection = $objConnection;
		
	}
	#end region
	
	
	#region Private Functions
	
	#end region
	
	
	#region Public Functions
	
	
	/**
	 * Thêm mới một sản phẩm
	 *
	 * @param int $m_manu_id Mã nhà sản xuất
	 * @param int $m_cat_id Mã nhóm
	 * @param string $name Tên sản phẩm
	 * @param string $m_image Tên file hình ảnh
	 * @return bool True->Thành công, False->thất bại
	 *
	 */
	public function insert($m_manu_id,$m_cat_id,$name,$description,$tree_function,$m_htmlTree,$userID,$date,$m_image) 
	{
		$intID = user_common::getMaxID(self::TBL_T_PRODUCT);
		
		$m_image = $intID;
		//đổi tên file image lại. Trước đó upload lên chỉ lưu tên tạm
		if(file_exists(self::FOLDER_IMAGE_PRODUCT.self::FILE_TEMP_UPLOAD))
		{
			rename(self::FOLDER_IMAGE_PRODUCT.self::FILE_TEMP_UPLOAD, self::FOLDER_IMAGE_PRODUCT.$m_image);
		}
		
		$strSQL = user_common::prepareQuery(self::SQL_INSERT_PRODUCT,
				array(self::TBL_T_PRODUCT,$intID,$m_manu_id,$m_cat_id, 
				user_common::escape_mysql_string($name),
				user_common::escape_mysql_string($description),
					user_common::escape_mysql_string($tree_function),
					user_common::escape_mysql_string($m_htmlTree),
					user_common::escape_mysql_string( $m_image), 
					$userID,$date));
		user_common::writeLog('Error add product:'.$strSQL,1);
		if (!user_common::ExecutequeryWithCheckExistedTable($strSQL,self::SQL_CREATE_TABLE_T_PRODUCT,$this->_objConnection,$strTableName))
		{
			//echo $strSQL;
			user_common::writeLog('Error add product:'.$strSQL,1);
			return false;
		}	
		
		return $intID;
		
	}
	public function update($intID,$m_manu_id,$m_cat_id,$name,$description,$tree_function,$m_htmlTree,$userID,$date,$m_image) 
	{
		
		$strSQL = user_common::prepareQuery(self::SQL_UPDATE_PRODUCT,
				array(self::TBL_T_PRODUCT,$m_manu_id,$m_cat_id, 
					user_common::escape_mysql_string($name),
					user_common::escape_mysql_string($description),
					user_common::escape_mysql_string($tree_function),
					user_common::escape_mysql_string($m_htmlTree),
					user_common::escape_mysql_string( $m_image), 
					$userID,$date,$intID));
		if (!user_common::ExecutequeryWithCheckExistedTable($strSQL,self::SQL_CREATE_TABLE_T_PRODUCT,$this->_objConnection,$strTableName))
		{
			//echo $strSQL;
			user_common::writeLog('Error update product:'.$strSQL,1);
			return false;
		}	
		return $intID;
		
	}
	/**
	 * Phương thức trình bày thông tin của trang san pha
	 *
	 * @param int $intPage Trang hiện tại
	 * @param mixed $where This is a description
	 * @return string Chuỗi HTML hiển thị
	 *
	 */
	public function getListProduct($intPage, $where)
	{
		$strSQL .= user_common::prepareQuery(user_common::SQL_SELECT_FREE,array('*',
					self::TBL_T_PRODUCT,' WHERE delete_flag IS NULL or delete_flag=\'0\' ORDER BY create_date desc limit '.(($intPage-1)* self::NUM_PER_PAGE).','.self::NUM_PER_PAGE));
		//echo $strSQL;		
		$arrProduct = $this->_objConnection->selectCommand($strSQL);
		
		$objCat =new user_catalogue($this->_objConnection);
		$arrCat = $objCat->getCatByIDs($arrProduct);
		
		if ($arrCat!=null)
		{
			foreach ($arrCat as $item)
			{
				$arrCatByKey[$item['cat_id']] = $item;
			}
		}
		//print_r($arrCat);
		//print_r($arrCatByKey);
		//chuyển kết quả vào danh sách ID đã theo thứ tự
		$icount = count($arrProduct);
		for($i=0;$i<$icount;$i++)
		{
			//echo $arrProduct[$i]['cat_id'];
			$arrProduct[$i]['cat_name'] = $arrCatByKey[$arrProduct[$i]['cat_id']]['name'];
			//echo $arrCatByKey[$arrProduct[$i]['cat_id']]['name'];
		}
		
		//print_r($arrProduct);
		$strHTML = ' <table class="tbl-list">
				<thead>
				<td>Tên</td>
				<td>Hình ảnh</td>
				<td style="width:100px">Nhóm</td>
				<td>Mô tả</td>
				<td style="width:100px">Danh mục chức năng</td>
				<td style="width:90px">Người tạo</td>
				<td>Thời gian tạo</td>
				<td>Người cập nhật</td>
				<td>Thời gian cập nhật</td>
				<td>Người Xóa</td>
				<td class="lastCell">Thời gian xóa</td>
				<td class="lastCell"></td>
				
				</thead>
				<tbody>';
		
		for($i=0;$i<$icount;$i++)
		{
			$strHTML.='<tr class="'.($i%2==0?'even':'odd').'">
					<td><a href="product_detail.php?product='.$arrProduct[$i]['product_id'].'&cat='.$arrProduct[$i]['cat_id'].'">'.$arrProduct[$i]['name'].'</a></td>
					<td> <img src="'.self::FOLDER_IMAGE_PRODUCT.$arrProduct[$i]['image'].'" width="70" height="70" style="margin-top:0px;padding-top:0px" /></td>
					<td>'.$arrProduct[$i]['cat_name'].'</td>
					<td>'.$arrProduct[$i]['description'].'</td>
					<td>'.($arrProduct[$i]['tree_function']?'<a href="view_tree.php?product='.urlencode($arrProduct[$i]['name']) .'&script='.urlencode($arrProduct[$i]['tree_function']).'" target="_blank" >View Tree</a>':'').'</td>
					<td>Admin 1</td>
					<td>15:00:00 20-8-2011</td>
					<td>---</td>
					<td>--</td>
					<td>--</td>
					<td>--</td>
					<td class="lastCell"><b><a href="javascript:_objAdminProduct.showEdit(\''.$arrProduct[$i]['product_id'].'\',this);">Edit</a></b></td>
					</tr>';
		}
		$strHTML.='</tbody></table>';
		
		$strHTML .= "<div>".user_common::getPagingHTMLByNum($intPage,self::NUM_PER_PAGE,user_common::getTotalRecord(self::TBL_T_PRODUCT,$this->_objConnection),
				"_objAdminProduct.changePageProducts")."</div>";
		return $strHTML;
	}
	
	
	/**
	 * This is method getProductByID
	 *
	 * @param mixed $objID This is a description
	 * @param mixed $selectField This is a description
	 * @return mixed This is the return value description
	 *
	 */
	public function getProductByID($objID,$selectField='*') 
	{
		
		$strSQL .= user_common::prepareQuery(user_common::SQL_SELECT_FREE, 
				array($selectField, self::TBL_T_PRODUCT ,'WHERE product_id = \''.$objID.'\' '));
		
		//echo '<br>SQL:'.$strSQL;
		$arrResult =$this->_objConnection->selectCommand($strSQL);
		//print_r($arrResult);
		//echo '<br>';
		if(!$arrResult)
		{
			user_common::writeLog('getProductByID:'.$strSQL,1,$_mainFrame->pPage);
			return null;
		}	
		$objCat =new user_catalogue($this->_objConnection);
		$arrCat = $objCat->getCatByID($arrResult['cat_id']);
		
		if ($arrCat!=null)
		{
			$arrResult['cat_name'] = $arrCat['name'];
		}
		
		//print_r($listID);
		return $arrResult[0];
	}
	
	/**
	 * Hàm lấy tất cả record của c_doc_xxxx dựa vào danh sách doc_id truyền vào dùng cho việc search.
	 *	
	 * @param array $listID mang chua doc_id va weight.
	 * @param string $prefixTable Tiền tố của table doc user_doc::TBL_T_DOC hay  user_doc::TBL_C_DOC
	 * @param string $selectField Cho biết các field cần lấy.
	 * @return array Danh sách record 
	 * @author ThanhViet added [20101005]
	 */
	public function getProductByIDs($listID,$selectField='*') 
	{
		$strID='';
		foreach ($listID as $key)
		{
			$strID.='\''.$key['id'].'\',';
		}
		$strID = user_common::cutLast($strID,1);
		$strSQL .= user_common::prepareQuery(user_common::SQL_SELECT_FREE, 
				array($selectField, self::TBL_T_PRODUCT ,'WHERE product_id IN ('.$strID.')'));
		
		//echo '<br>SQL:'.$strSQL;
		$arrResult =$this->_objConnection->selectCommand($strSQL);
		//print_r($arrResult);
		//echo '<br>';
		if(!$arrResult)
		{
			user_common::writeLog('getProductByIDs:'.$strSQL,1,$_mainFrame->pPage);
			return null;
		}	
		$objCat =new user_catalogue($this->_objConnection);
		$arrCat = $objCat->getCatByIDs($arrResult);
		
		if ($arrCat!=null)
		{
			foreach ($arrCat as $item)
			{
				$arrCatByKey[$item['cat_id']] = $item;
			}
		}
		//print_r($listID);
		//chuyển kết quả vào danh sách ID đã theo thứ tự
		foreach ($arrResult as $item)
		{
			$item['cat_name'] = $arrCatByKey[$item['cat_id']]['name'];
			$listID[$item['product_id']] = $item;
		}
		//print_r($listID);
		return $listID;
	}
	
	public function outputHTMLProductSearch($listID) 
	{
		$arrProduct = $this->getProductByIDs($listID);
		
		//print_r($arrProduct);
		$strHTML = '<table class="tbl-list" style="width:100%"><thead>
				<td class="lastCell" colspan="2">Sản phẩm</td>
				</thead></table> <table class="tbl-list">
				<thead>
					<td>Tên</td>
					<td>Hình ảnh</td>
					<td class="lastCell">Nhóm</td>
				</thead>
				<tbody>';
		$icount = count($arrProduct);
		foreach($arrProduct as $item)
		{
			$strHTML.='<tr class="'.($i%2==0?'even':'odd').'">
					<td width="30%"><a href="product_detail.php?product='.$item['product_id'].'&cat='.$item['cat_id'].'">'. $item['name'].'</a></td>
					<td width="20%"><a href="product_detail.php?product='.$item['product_id'].'&cat='.$item['cat_id'].'"> <img src="'.self::FOLDER_IMAGE_PRODUCT.$item['image'].'" width="100" height="100" style="margin-top:0px;padding-top:0px" /></a></td>
					<td class="lastCell">'.$item['cat_name'].'</td>
					</tr>';
		}
		$strHTML.='</tbody></table>';
		
		$strHTML .= "<div>".user_common::getPagingHTMLByNum($intPage,self::NUM_PER_PAGE,user_common::getTotalRecord(self::TBL_T_PRODUCT,$this->_objConnection),
				"_objAdminProduct.changePageProducts")."</div>";
		return $strHTML;
	}
	
	
	
	/**
	 * HTML product detail
	 *
	 * @param mixed $product_id Ma san pham
	 * @param mixed $cat_id ma nhom
	 * @return mixed This is the return value description
	 *
	 */
	public function outputHTMLProductDetail($product_id,$cat_id) 
	{
		$objProperty = new user_property($this->_objConnection);
		$arrProduct= $this->getProductByID($product_id);
		$objFAQ =new user_faq($this->_objConnection);
		$objSect = new user_section($this->_objConnection);
		$objCat = new user_catalogue($this->_objConnection);
		$objManu = new user_manufactory($this->_objConnection);
		
		
		
		$arrCat = $objCat->getCatByID($arrProduct['cat_id']);
		$arrSect = $objSect->getsectionByID($arrCat['section_id']);
		
		$arrManu = $objManu->getManuByID($arrProduct['manu_id']);
		
		$strHTML ='<table id="tblPopUp" class="tbl-list" style="width: 100%;" border="0" cellpadding="2" cellspacing="0">';
		$strHTML .='<thead>
				<td class="lastCell" colspan="2">Mô tả chung</td>
				</thead>
				<tr>';
		$strHTML .='<td width="110">Tên sản phẩm</td>';
		$strHTML .='<td width="567">'.$arrProduct['name'].'</td>';
		$strHTML .='</tr>';
		$strHTML .='<tr>';
		$strHTML .='<td width="110">Ngành hàng</td>';
		$strHTML .='<td width="567">'.$arrSect['name'].'</td>';
		$strHTML .='</tr>';
		$strHTML .='<tr>';
		$strHTML .='<td width="110">Nhóm hàng</td>';
		$strHTML .='<td width="567">'.$arrCat['name'].'</td>';
		$strHTML .='</tr>';
		$strHTML .='<tr>';
		$strHTML .='<td width="110">Nhà sản xuất</td>';
		$strHTML .='<td width="567">'.$arrManu['name'].'</td>';
		$strHTML .='</tr>';
		
		$strHTML .='<tr>';
		$strHTML .='<td width="110">Mô tả</td>';
		$strHTML .='<td width="567">'.$arrProduct['description'].'</td>';
		$strHTML .='</tr>';
		$strHTML .='<tr>';
		$strHTML .='<td width="110">Cấu trúc chức năng</td>';
		$strHTML .='<td width="567">'.($arrProduct['tree_function']?'<a href="view_tree.php?product='.urlencode($arrProduct['name']) .'&script='.urlencode($arrProduct['tree_function']).'" target="_blank" >View Tree</a>':'').'</td>';
		$strHTML .='</tr>';
		$strHTML .='<tr>';
		$strHTML .='<td width="110">Hình ảnh</td>';
		$strHTML .='<td width="567"><img src="'.self::FOLDER_IMAGE_PRODUCT.$arrProduct['image'].'" width="170" height="170" style="margin-top:0px;padding-top:0px" /></td>';
		$strHTML .='</tr>';
		$strHTML .='</table>';
		$strHTML .='<div  style="clear:both;padding:10px">';
		$strHTML .= $objProperty->outputPropertyForProductDetail($product_id,1);
		$strHTML .= $objProperty->outputPropertyForProductDetail($cat_id,2);
		$strHTML .='</div>
					<div style="clear:both;positon: relative ; padding:10px;" >
					</div>
					<div style="padding:10px">';
		$strHTML .= '<div id="faq-product">'.$objFAQ->outputFaqForProductDetail($product_id,1,1).'</div>';
		$strHTML .= '<div id="faq-cat">'.$objFAQ->outputFaqForProductDetail($cat_id,2).'</div>';
		$strHTML .='</div>';
		return $strHTML;
	}
	
	/**
	 * Phương thức hiện thị theo HTML 
	 *
	 * @param array $arrObject đối tượng 
	 * @param int $subType loại màn hình
	 * @return string Chuỗi hiện thị HTML
	 *
	 */
	public function outputAdminProduct($arrObject,$subType)
	{
		
	}
	#end region
}
?>